1 程序概览与简介
1.1 关于 PhoneticToolbox
PhoneticToolbox是一款基于 Python 和 PyQt6 框架自主研发的综合性语音分析与合成平台。本项目的一部分致敬并复刻了经典的 MATLAB 版 VoiceSauce 工具包的核心功能,旨在为语音学研究者提供一个现代化、易于扩展且交互友好的图形化分析环境。
与传统的 VoiceSauce 相比,PhoneticToolbox 在易用性上实现了质的飞跃。VoiceSauce 本质上是一套 MATLAB 脚本,用户必须预先下载并安装庞大的 MATLAB 环境才能运行。而 PhoneticToolbox 已被封装为独立的.exe可执行程序,完全脱离了对 MATLAB 的依赖,用户无需任何编程基础或复杂环境配置,双击即可在 Windows 平台上随时开展研究工作,真正做到了即开即用。
在传统的语音学研究流程中,研究者往往需要在多个独立软件间频繁切换:用一个软件提参数,换一个软件做合成,再找一个平台跑实验——这种“割裂感”极大地消耗了科研精力 。而PhoneticToolbox 的诞生正是为了打破壁垒,它不仅仅是一个参数提取器,更是一座集成了声学分析、语音合成、生理信号处理以及感知实验的一站式全流程工作站。
特别值得一提的是,本软件针对语音发声类型(Phonation Types)研究中的痛点进行了深度优化。针对嘎裂(Creak)等发生类型,集成了更鲁棒的基频检测算法(如 REAPER),并支持从全自动数据提取到精细化可视化修正的完整闭环。
作者:中山大学 中国语言文学系(珠海)博士研究生 井立文
个人主页:https://www.zhihu.com/people/jingshaozi
1.2 主界面导览
双击PhoneticToolbox.exe启动软件后,您将看到采用深色模式设计的主控制面板。(一定程度上能减轻科研人员长时间注视屏幕的视觉疲劳2333)
主界面摒弃了繁杂的菜单堆砌,采用直观的网格化布局,将十大核心功能模块一目了然地呈现于眼前,确保您能以最快速度进入工作状态 。
1.3 核心功能模块
PhoneticToolbox 的功能架构主要分为三大类:声学参数分析、语音编辑与合成、以及辅助工具。
声学参数分析核心
这是本软件最基础也最强大的部分,旨在对标VoiceSauce的功能。(除了共振峰提取时没有选择snake脚本)
参数估计
这是数据处理的起点。该模块能够批量处理.wav音频文件及.TextGrid标注文件,自动提取包括基频 (F0)、共振峰 (Formants)、以及复杂的声源参数(如 H1-H2, H1-A1, CPP, HNR 等)。系统集成了多种基频检测算法,包括经典的 Praat 算法以及专门针对嘎裂声优化的 REAPER 算法,确保了在复杂语音环境下的鲁棒性。
参数显示
提供交互式的可视化界面。用户可以加载计算好的数据文件,查看各类声学参数的轨迹及标注。
EGG 信号分析
专为生理语音学打造。支持双声道 EGG 信号的自动分离、归一化及逆滤波;能够精确检测声门速度商(SQ) 和闭合商(CQ),并在语谱图上同步显示声门闭合/开放时刻(GCI/GOI),直观揭示声带振动机制。
语音操作与合成
这一板块为语音感知实验提供了极高自由度的材料制作能力。
可视化语音合成
内置了基于 Klatt 模型的串联/并联共振峰合成器。这是一个高度可视化的合成实验室,用户可以直观地调节 F0、共振峰频率、带宽以及声源类型(如耳语、气声、嘎裂等),实时生成符合特定声学特征的语音样本。
变速变调
基于 Parselmouth (Praat) 的 PSOLA 与重采样算法,提供高质量的语音操纵功能。支持对原始语音的基频曲线进行手绘式修改,或进行时长伸缩。您可以对原始语音的基频曲线和时长进行精细调节,可用于制作声调感知实验的刺激材料。
感知实验
一个轻量级、基于 Web 技术(HTML5/JS)的实验系统。支持快速构建 AX 区分、ABX 区分、情感识别等经典实验范式,生成的实验可直接在本地运行并自动记录反应时。
数据管理与辅助
手动数据 (Manual Data)
可直接查看保存的参数。
设置
允许用户自定义分析参数的默认值(如窗长、步长、基频范围等),以适应不同性别或语种的语音材料。
2 参数估计及显示
2.1 参数估计
单击 “浏览” 按钮,选择包含待处理音频的文件夹。默认情况下,参数提取结果(.csv)将输出至同一目录,您也可指定其他路径。
播放/停止播放
- 单击 “播放选中音频” 可试听当前文件,方便快速核查素材
- 单击 “停止播放” 即可立即终止播放,防止音频过长造成的不便。
刷新文件列表
若在当前文件夹中添加或删除了音频文件,单击 “刷新文件列表” 即可同步更新软件内的文件显示。
读取TextGrid
针对长音频处理,软件支持自动加载与音频文件同名的.TextGrid标注文件(需位于同一文件夹下),支持按照层级(Tier)批量导出片段。这些.TextGrid既可用于辅助参数提取,也可作为音频切分的依据。
TextGrid切分 / 保存切分音频
操作流程:首先在列表中选中待处理的音频(支持鼠标拖动多选或 Ctrl+A 全选)。单击 “TextGrid切分” 按钮,按钮文本将变更为 item[1]:xxxx(其中“xxxx”为当前层级名称)。重复单击该按钮,可切换至 TextGrid 的下一个层级。遍历完所有层级后,按钮状态将重置回初始的 “TextGrid切分”。若选中的音频缺失对应的 TextGrid 文件,程序将弹出如下提示:
单击 “保存切分音频”,程序将依据 “TextGrid切分” 按钮当前选定的层级进行切分与导出。若当前未选择任何层级,将弹出警告:
切分并保存成功后,系统将弹窗提示“已保存 xxx 个片段”。
此时单击 “刷新文件列表”,列表中将显示所有切分后的音频片段。
命名规则:切分后的文件名格式为原始文件名_当前item名称_当前interval名称_起始时间_终止时间.wav。
注意:
- 若在参数提取前进行切分,仅保存音频文件;
- 若在参数提取后进行切分,将同步保存对应的参数文件。
开始处理
单击 “开始处理” 按钮,程序将对当前文件列表中的所有音频进行批量参数提取。
特别提示:若原始音频过长(例如超过 10 分钟),强烈建议先进行切分再处理,以避免严重的内存占用问题。(切分完成后,请务必将原始长音频移出当前文件夹,防止程序对其重复进行全量处理)。
2.2 参数显示
处理完成后,请选择包含音频及 CSV 文件的目录。若加载成功,界面将显示当前文件夹下的全部音频文件,以及已提取的参数数据。
若当前音频尚未进行参数提取,则右侧参数列表一栏将显示为空。
界面交互与可视化:
音频列表、参数列表以及可视化图窗的宽度均支持拖动调整,以适应不同的浏览需求。选中已处理的音频后,单击右侧任意参数,该参数的数值轨迹将实时绘制在图表中。
视图交互
缩放时间轴:滚动 鼠标滚轮,即可仅对 X 轴(时间)进行放大或缩小,方便在微调细节与查看全貌间切换。
左右平移:直接按住 鼠标左键 在图表中左右拖拽,即可平移视图查看不同时间段的内容。
参数批量选择:
* 鼠标拖拽:在参数列按住鼠标左键并拖动,可连续选中多个参数。
* Ctrl + 单击:按住 Ctrl 键单击不同参数,可进行非连续的多项选择。
搜索筛选:
在搜索框中输入任意字符串,系统将实时筛选并显示文件名或参数名中包含该字符的条目,方便快速定位。
TextGrid 可视化:
对于已读取 TextGrid 标注文档且未进行切分的音频,用户可以在界面中选择显示 TextGrid 不同层级(Tier)的标注内容,以便对照分析:
(注:示例中的 TextGrid 为 MFA 自动标注结果,尚未经人工校对,边界可能存在偏差,此处仅作功能展示用途。)
3 EGG 信号分析
3.1 初始界面与文件加载
EGG信号分析程序的初始界面如图所示:
加载与预处理
单击左上角的“文件”,选择EGG信号(.wav文件)。
- 默认声道逻辑:软件默认左声道(Channel 0)是EGG信号,右声道(Channel 1)是音频波形。
- 归一化:为了统一显示幅度,软件加载时会自动将左右声道分别归一化至 -0.7 ~ 0.7 之间。
音频总览与导航
加载音频后,界面最下方会出现音频总览的波形图及滑块。
- 时间窗口:默认显示60秒的音频概览。
- 长音频导航:若总音频长度超过60秒,滑动最下方的进度条可查看后续内容。
- 快速定位:在底部波形图上单击鼠标左键,主视图区域的 “开始(s)” 参数会自动跳转至单击处的时间。
- 时长设置:主视图语谱图内的音频显示长度,可以在 “时长(s)” 处手动设置。
3.2 主视图交互与显示
在总览图或参数栏更新后,主视图区域(CQ、SQ图像及语谱图)会自动更新。
点击联动
在语谱图上单击鼠标左键。
- 光标定位:CQ、SQ图像及语谱图中会在对应时间点处显示红色的竖直线。
- 波形细查:界面右侧的“音频波形图”以及“EGG波形图”会同步放大显示单击处附近的波形细节(默认范围为50毫秒)。
- 调整缩放:修改下方的 “缩放(ms)” 处的数据,再次点击语谱图,可以改变右侧波形图的时间窗口大小(范围为10~200ms)。
播放控制
- 单击 “播放音频”:默认播放当前语谱图(ROI)时间范围内的音频。
- 单击 “停止播放”:立即停止播放,防止用户误操作播放过长的音频片段。
3.3 分析功能与参数设置
交换声道
若您发现您的音频信号和EGG信号的左右声道与软件默认情况(左EGG右音频)相反,可以点击菜单栏的“工具”→ “交换左右声道” 选项。软件会自动交换数据并重新加载,无需重新打开文件。
显示F0/校正F0
单击 “显示F0” 复选框,软件将调用 Parselmouth (Praat内核) 进行基频提取,并以黑色曲线绘制在语谱图中。
单击 “校正F0(GCI)”复选框,软件将使用EGG信号检测出的 GCI(声带接触点)的时间间隔 (F0 = 1/T) 作为当前的基频值。
前提条件:需要先在语谱图中激活“显示F0”后,才能激活“校正F0(GCI)”。此功能对基频极低的发声类型(如嘎裂)的检测通常比声学算法更准确。
峰值门限/谷值门限
这两个参数用于控制 GCI(声门关闭时刻)和 GOI(声门开放时刻)的检测灵敏度。
- 峰值门限:用于检测 EGG 微分信号的正向峰值。软件默认开启 “自动” 模式,使用窗宽200ms帧移100ms的小窗内的信号强度自动设置峰值门限。取消勾选后可手动输入数值,锁定全局门限。
- 谷值门限:用于检测 EGG 微分信号的负向谷值,影响 GOI 的定位及开商(OQ)的计算。一般使用默认值就可以,无需调整。
- 自动:默认勾选。勾选时,峰值门限按照200ms的小窗、100ms的帧移进行自动检测,以每个小窗内最大峰值的60%设置峰值门限。若不勾选,则设置一个全局通用的阈值。适合在自动检测失效的片段使用。
语谱窗长(ms)
设置语谱图短时傅里叶变换(STFT)的窗长。
- 值越大(如30ms):频率分辨率越高(能看清谐波),但时间分辨率越低(横向模糊)。
- 值越小(如5ms):频率分辨率越低,但时间分辨率越高(能看清脉冲)。
GCI:斜率/GOI:斜率
点击按钮可切换 GCI 和 GOI 的检测算法。默认使用斜率法计算,单击后变成 “GCI:尺度” / “GOI:尺度”。
根据论文《汉语韵律的嗓音发声研究》,建议GCI使用斜率法,GOI使用尺度法。经测试,这种设置方式计算出的生理参数(CQ、SQ)比较稳定。
声门移动检测
点击 “声门移动” 按钮,软件会尝试检测基频(F0)的剧烈变化点。
- 显示方式:在语谱图中显示声门上升处(白色竖直虚线)及声门下降处(橙色竖直虚线)。
- 注意:目前仍有bug,不建议使用。
逆滤波 (Inverse Filtering)
该功能用于去除声道共振影响,还原声门波形。选择一段稳定的元音片段,点击 “逆滤波”。软件会自动保存两个WAV文件到原文件夹:
_ORIG.wav:原始音频片段。_IF.wav:逆滤波后的声源波形片段。
同时,会弹出一个新窗口展示逆滤波前后的波形及振幅谱的对比。
保存分析
点击 “保存分析” 按钮,软件会将当前时间范围内的分析结果导出至原音频文件夹。
- 图像导出:将语谱图、CQ/SQ趋势图、波形图保存为PNG图像(白底黑字,适合论文发表)。
- 数据导出:将当前范围内的CQ、SQ、F0等逐点数据保存为CSV文件。
(但是里面nan值较多,这是因为脚本是按照不同参数的每一个有效的时间点保存的,不同参数的时间点可能没有对齐,等我过两天修了这个bug或者您直接用批量处理的脚本) - 命名规则:
当前音频文件名_(开始)秒_(结束)秒_类型.png/csv。例如:
测试音频_59_21s_61_21s_CQ_SQ.png
测试音频_59_21s_61_21s_DATA.csv保存的图像如下:
3_14_56s_15_56s_CQ_SQ.png3_14_56s_15_56s_SPEC_F0.png3_14_56s_15_56s_WAVEFORMS3.4 批量处理
对于大量数据,可使用批量处理功能自动计算并导出结果。
参数设置:
- 根文件夹:选择包含wav文件的文件夹(支持包含子目录)。
- 静音能量阈值:低于该能量的片段将被视为静音,不计算CQ/SQ。
- 高通滤波:设置批量处理时的EGG滤波频率(推荐20Hz以下,不宜过大,过大会影响CQ、SQ的值)。
- 翻转左右声道:若这批数据的EGG信号在右声道,请勾选此项。
输出结果:
软件会自动在根文件夹同级目录下生成三个结果文件夹,分别对应不同的算法组合(如“斜率法-斜率法”、“斜率法-尺度法”、“尺度法-尺度法”等),方便对比研究。每个文件夹内会默认保存每个音频(EGG)信号的波形图、语谱图、SQ/CQ图及参数表格。
4 语音合成
4.1 系统概览及界面布局
本界面是一个可视化的语音合成与分析平台,旨在帮助语言学研究者通过交互式的方式探索语音产生的声学机制。它集成了经典的 Klatt 1980 串联/并联共振峰合成器,并辅以现代化的 Praat 分析接口,允许用户精细控制声源(如 F0、HNR、Jitter)和声道(共振峰 F1-F5)参数。
本界面可以从零开始合成元音,也可以对真实语音进行复制合成与参数修改。
界面布局
软件界面主要分为三个区域:
顶部控制栏:用于文件操作、时长设置、元音生成及全局开关。
可视化视窗:
从上至下、从左至右分别为:
- 音频波形
- 基频曲线
- AV(默认设置为200)
- 基频抖动
- 振幅抖动
- SHR(次谐波谐波比)
- HNR(谐波噪声比)
- 频谱斜率(0-5000Hz)
- H1-H2
- 第一共振峰
- 第二共振峰
- 第三共振峰
这些视窗占据屏幕主体,包含多个可交互的曲线编辑器。
4.2 参数曲线编辑
这是本界面最核心的交互区域。每个参数都有独立的编辑面板。
操作手势:
拖动及缩放
- 可在曲线图中按住鼠标沿x轴或y轴拖动,当拖动一个图窗时,所有图窗的x轴范围将会统一变化,y轴不变。
- 可在曲线图中使用滚轮进行x轴缩放(y轴固定)。当拖动一个图窗时,所有图窗的x轴范围将会统一变化,y轴不变。
绘制曲线:
按住 Shift + 鼠标左键 拖动。这是最常用的修改方式,您可以像画画一样自由绘制参数轨迹。
擦除/重置:
按住 Ctrl + 鼠标左键 拖动。选中的区域的参数将恢复到默认值。
全局设定 (Global):
在每个编辑器顶部的输入框中:
- 输入单个数值(如
-10),将整段音频的该参数设为恒定值。并且曲线变红,此时不可进行鼠标绘制编辑。
- 输入线性插值指令,使用逗号分隔数值(如
-10,0,-10,10,-10),参数将从一个值线性过渡到另一个值。(全角逗号半角逗号均可)
- 输入分段指令,使用分号分隔数值(如
-10;0;-10;10;-10),参数将呈现阶梯型过渡。(全角分号半角分号均可)
- 支持线性插值和分段相结合(如
10,-10;0;-10,10;-10):
导入导出参数:
点击菜单栏的导出参数,可以将当前参数全部导出,保存为.csv文件。
点击导入参数,可以加载之前导出的或别人发来的参数文件。
参数字典
为了更好地理解调节的意义,下表整理了主要参数的含义:
| 参数名 | 全称 | 物理/声学含义 | 听感影响 |
|---|---|---|---|
| F0 | Fundamental Frequency | 声带振动的基频 | 音高 |
| AV | Amplitude of Voicing | 浊音源的振幅 | 声音的响度 |
| F1-F5 | Formant Frequencies | 声道的共振频率 | 决定元音的音色 |
| HNR | Harmonics-to-Noise Ratio | 谐波与噪声的比率 | 值越低,噪声能量越强,代表声音越“沙哑”或“充满气流” |
| Jitter | Frequency Perturbation | 基频的周期性抖动 | 较大的jitter可模拟粗糙感或病理嗓音。这个参数非常不稳定,一般设置得极低才能不影响听感。 |
| Shimmer | Amplitude Perturbation | 振幅的周期性抖动 | 较大的jitter可模拟粗糙感。这个参数也非常不稳定。 |
| SHR | Subharmonic Ratio | 次谐波比率 | 用于模拟嘎裂,嘎裂的SHR值通常在0.2以上 |
| Slope | Spectral Slope | 频谱的高频衰减斜率 | 值越小,声音越闷;值越大,声音越亮,一般不建议设置为大于0的值 |
| H1-H2 | First/Second Harmonic Diff | 第一与第二谐波的幅值差 | 衡量声门闭合程度(通常气声 H1-H2 较大,嘎裂 H1-H2 较小) |
这里,HNR、H1-H2、Slope目前使用的是频域滤波的方法进行设置的。
另外,对于Shimmer,即便设置的值为0,但是仅靠其他参数合成出来的音频,计算出的Shimmer也绝不为0。这些参数相互依赖、相互影响、相互制约。合成时输入的值,一定与最终参数估计时提取出的值有差异。
4.3 元音生成器
程序可根据用户输入的元音音标自动生成元音音频。步骤如下:
- 1.在顶部的 元音(IPA) 输入框中输入元音序列(仅支持 IPA 符号)。
- 2.设置平滑点数
- 3.点击 合成元音。
- 4.系统会自动计算 F1、F2、F3 的轨迹,并生成平滑的过渡曲线。
程序支持的元音如下(实际命名时开闭和高低两套描述开口度方案保留一个即可,此处仅为展示):
| IPA | F1 (Hz) | F2 (Hz) | F3 (Hz) | 舌位 (前后) | 开口度 (闭-开) | 开口度 (高-低) | 圆唇性 | 完整描述 (备注) |
|---|---|---|---|---|---|---|---|---|
| i | 270 | 2290 | 3010 | 前 | 闭 | 高 | 不圆唇 | 前闭(高)不圆唇元音 |
| y | 270 | 1800 | 2200 | 前 | 闭 | 高 | 圆唇 | 前闭(高)圆唇元音 |
| ɨ | 290 | 1400 | 2100 | 央 | 闭 | 高 | 不圆唇 | 央闭(高)不圆唇元音 |
| ʉ | 290 | 1200 | 2100 | 央 | 闭 | 高 | 圆唇 | 央闭(高)圆唇元音 |
| ɯ | 300 | 1100 | 2200 | 后 | 闭 | 高 | 不圆唇 | 后闭(高)不圆唇元音 |
| u | 300 | 870 | 2240 | 后 | 闭 | 高 | 圆唇 | 后闭(高)圆唇元音 |
| ɪ | 390 | 1990 | 2550 | 前 | 次闭 | 次高 | 不圆唇 | 前次闭(次高)不圆唇元音 |
| ʏ | 390 | 1500 | 2100 | 前 | 次闭 | 次高 | 圆唇 | 前次闭(次高)圆唇元音 |
| ʊ | 440 | 1020 | 2240 | 后 | 次闭 | 次高 | 圆唇 | 后次闭(次高)圆唇元音 |
| e | 390 | 2030 | 2600 | 前 | 半闭 | 半高 | 不圆唇 | 前半闭(半高)不圆唇元音 |
| ø | 390 | 1550 | 2200 | 前 | 半闭 | 半高 | 圆唇 | 前半闭(半高)圆唇元音 |
| ɘ | 390 | 1300 | 2200 | 央 | 半闭 | 半高 | 不圆唇 | 央半闭(半高)不圆唇元音 |
| ɵ | 390 | 1100 | 2200 | 央 | 半闭 | 半高 | 圆唇 | 央半闭(半高)圆唇元音 |
| ɤ | 460 | 1100 | 2300 | 后 | 半闭 | 半高 | 不圆唇 | 后半闭(半高)不圆唇元音 |
| o | 460 | 800 | 2250 | 后 | 半闭 | 半高 | 圆唇 | 后半闭(半高)圆唇元音 |
| ə | 500 | 1500 | 2500 | 央 | 中 | 中 | 不圆唇 | 央中不圆唇元音 (中央元音) |
| ɛ | 530 | 1840 | 2480 | 前 | 半开 | 半低 | 不圆唇 | 前半开(半低)不圆唇元音 |
| œ | 530 | 1300 | 2200 | 前 | 半开 | 半低 | 圆唇 | 前半开(半低)圆唇元音 |
| ɜ | 560 | 1350 | 2200 | 央 | 半开 | 半低 | 不圆唇 | 央半开(半低)不圆唇元音 |
| ɞ | 560 | 1100 | 2200 | 央 | 半开 | 半低 | 圆唇 | 央半开(半低)圆唇元音 |
| ʌ | 640 | 1200 | 2400 | 后 | 半开 | 半低 | 不圆唇 | 后半开(半低)不圆唇元音 |
| ɔ | 570 | 840 | 2410 | 后 | 半开 | 半低 | 圆唇 | 后半开(半低)圆唇元音 |
| æ | 660 | 1720 | 2410 | 前 | 次开 | 次低 | 不圆唇 | 前次开(次低)不圆唇元音 |
| ɐ | 660 | 1400 | 2300 | 央 | 次开 | 次低 | 不圆唇 | 央次开(次低)不圆唇元音 |
| a | 730 | 1090 | 2440 | 前 | 开 | 低 | 不圆唇 | 前开(低)不圆唇元音 |
| ɶ | 730 | 1000 | 2200 | 前 | 开 | 低 | 圆唇 | 前开(低)圆唇元音 |
| ɑ | 730 | 1100 | 2400 | 后 | 开 | 低 | 不圆唇 | 后开(低)不圆唇元音 |
| ɒ | 730 | 850 | 2300 | 后 | 开 | 低 | 圆唇 | 后开(低)圆唇元音 |
| ɹ | 400 | 1600 | 2600 | 前 (齿) | 闭 | 高 | 不圆唇 | 舌尖前不圆唇元音 (zi, ci, si的韵母,在国际音标表中是辅音) |
| ɻ | 400 | 1350 | 2200 | 后 (卷舌) | 闭 | 高 | 不圆唇 | 舌尖后不圆唇元音 (zhi, chi, shi的韵母,在国际音标表中是辅音) |
【附】国际音标输入法(网页版):
https://ytenx.org/byohlyuk/IPA_IME
【附】国际音标推荐字体:
https://software.sil.org/zh-CN/doulos/download/
合成与播放
合成:点击菜单栏的 “合成”。系统将根据当前的所有参数曲线,调用 Klatt 算法生成音频。
- 注意:如果开启了 “锁定共振峰” 模式,逻辑会有所不同(详见 4.5 节)。
播放:点击菜单栏的 “播放”,试听合成结果。
导出音频:点击菜单栏的 “到处音频”,可以将合成结果导出为.wav格式的音频文件。
元音韵律语法
如果不加任何符号,默认所有元音(或空格)时间等长。使用韵律语法,可以更改每个元音(或空格)的长度。
+:当前元音时长增加0.1倍-:当前元音时长减少0.1倍*:当前元音时长变为2倍/:当前元音时长变为1/2倍
同一个元音(或空格),后面的韵律语法可以叠加使用,从左至右依次生效。最终按照各个元音(或空格)长度的比例进行赋值,如:
①:a-i/- ///u+/e++o/-
①:o ///i ///i ///a ///i ///o ///i ///i ///i ///a ///i对于①,元音长度比例分别为:
a:0.9
i:0.4
空格:0.175
u:0.55
e:1.2
o: 0.4按照2秒的总长度为各个元音赋值:
a:0.497秒
i:0.221秒
空格:0.097秒
u:0.303秒
e: 0.662秒
o: 0.221秒对于②,元音长度比例分别为:
元音:1.0
空格:0.175按照2秒的总长度为各个元音赋值:
元音:0.157秒
空格:0.027秒生成后,图中会用红色虚线标注元音(或空格)之间的分界线。此时可以编辑基频曲线为不同的元音赋予不同的基频。
实际上,通过仔细绘制共振峰曲线和基频曲线,可以合成出非常逼真的元音音频。
渐入/渐出
合成元音时,首尾段或空格前后从0渐变至正常振幅的时间。
元音规则
单击菜单栏中的“元音规则”,将会弹出新的窗口,上半部分展示不同元音合成时所采用的共振峰参数。单击元音可复制该元音音标。下半部分展示了元音韵律语法。
4.4 发声态预设
本程序预设了五种不同的发声类型(Phonation Types),分别是:
- 常态浊声(Modal Voice)
- 气声(Breathy Voice)
- 嘎裂(Creak)
- 耳语(Whisper)
- 假声(Falsetto)
通过调整参数,可以大致模仿这五种发声类型。(但做不到非常相似)
以以下元音序列合成的音频为例:
a ///u//o ///ɯ//ɤ ///i ///u ///y常态浊声
预设如下:
{"HNR": 40, "Slope": -10, "H1H2": 0, "SHR": 0, "Jitter": 0.5, "F0": 120, "AV": 200}耳语:
预设如下:
{"HNR": 40, "Slope": -10, "H1H2": 0, "SHR": 0, "Jitter": 0.0, "F0": 120, "AV": 20}气声:
预设如下:
{"HNR": 20, "Slope": -10, "H1H2": 10, "SHR": 0, "Jitter": 0.0, "F0": 120, "AV": 200}嘎裂:
预设如下:
{"HNR": 40, "Slope": -10, "H1H2": -10, "SHR": 0.8, "Jitter": 3,"F0": 60, "AV": 200}假声:
预设如下:
{"HNR": 40, "Slope": -15, "H1H2": 0, "SHR": 0, "Jitter": 0, "F0": 300, "AV": 200}在合成连续语音时,可以参照以上发声类型,控制不同参数不同时刻的值,让发声类型在合成语音中连续变化。
4.5 复制合成
这一部分目前效果不佳。待后续修改更新。
用户可以导入一段真实录音,提取其参数,修改后再合成。步骤如下:
- 1.加载音频:菜单栏 -> 加载音频。
- 2.自动分析:菜单栏 -> 分析。
- 3.修改参数:在提取出的曲线基础上,手动修改某些部分(例如,保持 F0 不变,降低 HNR 来模拟气声)。
- 4.合成:点击合成,听到修改后的声音。
系统会调用 Praat 后端及参数估计的部分脚本,自动提取音频的 F0、共振峰 (F1-F4)、HNR、Jitter、Shimmer 等参数,并将其转化为曲线显示在编辑器中。
锁定模式
在顶部工具栏有一个 “锁定共振峰” (Lock Mode) 复选框。
未勾选(默认):完全使用 Klatt 合成器从零生成声音。声源是数学生成的脉冲波,声道是数字滤波器。
勾选后:
- 声源:直接使用 原始录音 作为基础。
- 处理:系统会对原始录音进行 频域滤波 (Spectral Filtering),应用你设置的 H1-H2(频谱倾斜)、Slope(高频滚降)和 HNR(噪信比)参数。
- 用途:当你只想改变发声态(如把真声变成气声),但想完美保留原始语音的共振峰和自然度时,请使用此模式。
再次提醒,这一部分目前效果不佳。待后续修改更新。请直接使用元音合成器。
5 变速变调
5.1 软件界面与基本操作
changeF0 是一个基于 Python 和 Parselmouth (Praat) 的高级语音处理平台。它不仅支持对单个音频进行可视化的基频绘制和语速调整,还内置了批量生成器,能够根据设定的频率列表自动生成一系列连续变化的刺激材料,非常适合语音学听辨实验材料的制作。
软件界面与基本操作
启动程序后,将进入主工作台“基频实验室”。
音频加载与视图
加载音频:单击 “加载音频” 选择文件(支持 .wav, .mp3, .flac)。加载后,界面会自动划分四个象限:
- 左上 (原始波形):显示未处理的音频波形。
- 右上 (基频编辑):核心交互区。显示原始 F0(青色虚线)和当前修改后的 F0(红色实线)。
- 左下 (合成波形):点击合成后,此处显示新生成的波形。
- 右下 (历史F0对比):这是一个非常实用的功能。它会自动读取当前文件夹下所有基于该文件生成的历史版本(命名带
_modified_x的文件),并将它们的 F0 轨迹画在一起,方便对比不同版本的差异。(手绘基频需要先点上方的“保存并编号”才会被加载进来)
视图交互
缩放视野:在波形图或基频图中滚动 鼠标滚轮,可以放大或缩小时间轴(X轴),方便查看局部细节。
Y轴范围调整:在控制面板的“Y轴范围设置”中输入 Min 和 Max(赫兹),点击 “应用范围” 可锁定视图纵坐标,让音高变化在视觉上更加明显,也方便基频曲线的绘制。
参考线:在“参考线工具”中输入频率值(如200),点击 “添加参考线”,图中会出现水平虚线,辅助精确作图。
5.2 单文件精细编辑流程
手绘基频
在右上角“基频编辑”区域,直接按住鼠标左键并拖动,即可像画画一样修改红色的基频曲线。代码逻辑会寻找鼠标经过位置最近的时间点,并将该点的 F0 值更新为您绘制的数值。
语速调整
在顶部的 “语速倍率” 输入框中填写数值:
1.0:原速。> 1.0:加速(如 1.2 表示 1.2 倍速,时长变短)。< 1.0:减速(如 0.8 表示 0.8 倍速,时长变长)。
合成与试听
- 合成:修改满意后,单击 “合成当前视野”。程序会基于当前视野内的时间段、修改后的 F0 曲线以及语速倍率,生成新的音频片段。
- 试听:
- “播放当前视野原音”:对比参照。
- “播放合成音”:检查修改效果。
智能保存与版本管理
保存:单击 “保存并编号”。程序会自动在原文件夹下生成新文件,命名格式为 原文件名_时间范围_modified_序号.wav。系统会自动检测已有的序号并自动递增(如 _1.wav, _2.wav),防止覆盖。
对比图更新:保存后,右下角的“历史F0对比”图会自动刷新,将刚保存的曲线加入对比序列。
文件管理:
- “删除本批次音频”:一键删除当前视野对应的所有历史修改文件。
- “批量重命名”:为当前批次文件添加统一前缀。
- “保存对比图”:将右下角的历史对比轨迹导出为独立的 PNG 图片。
1.5倍语速:
0.5倍语速:
乱画的基频:
默认保存名称为:原始音频名称_起点时刻_终点时刻_modified_1(序号)
【注意】:读取音频后会默认读取当前加载的音频程序直接修改保存且未重命名的所有音频,并加载至“历史F0对比”图窗中。此时若选择“删除本批次音频”,会默认将所有加载的音频全部删除。删除时请核对数量,以及确保生成后重命名,或没有之前修改过的音频还留在当前文件夹。
再举一个例子
之前保存的常态浊声的音频:
- 原音频
- 绘制基频曲线后的音频1:
- 绘制基频曲线后的音频2:
想怎么画就怎么画hhh
5.3 自动化工具
线性/动态基频批量生成器
位于界面下方的 “批量改变基频” 面板,支持“笛卡尔积”式的批量生成。
功能逻辑
用户可以输入起始时间、终止时间,并为起点和终点分别输入一个频率列表(用逗号分隔,如 100,120,140,160,180,200,220)。程序会自动组合这些频率点,生成多条 F0 轨迹并保存为音频。
- 100Hz
- 160Hz
- 220Hz
【注意】:起始时间和终止时间一定按照基频编辑中的基频曲线来编辑。如当前基频只在0.13-0.62s区间内有值,那么起点最好填写0.13,终点最好填写0.62。
拐点系统
点击 “添加拐点” 或 “编辑拐点”,可以设置中间的时间点及其频率列表。
连接方式:在“编辑拐点”表格中,可以设置相邻点之间的连接逻辑:
- 全连接 (Full):前一层的所有点与当前层的所有点两两组合(生成数量剧增)。
- 顺序 (Order):第1个点连第1个点,第2个连第2个……(要求列表长度一致)。
- 逆序 (Reverse):第1个点连倒数第1个点,第2个连倒数第2个……
- 常量 (Constant):只有一个点,可以和加一个时间节点的所有其他点连接。如果输入向量,默认使用第一个点。
可以直接在“批量改变基频”栏目添加拐点、清除所有拐点:
当然,更推荐的是直接点击“编辑拐点”,进行所有点的统一设置。
【重要】不同连接方式的例子(以一个拐点为例):
全连接(全连接-全连接-全连接)
此时程序将会生成6×6×6共216条音频。
常量(常量-顺序-常量):
顺序(顺序-顺序-全连接):
逆序(逆序-顺序-全连接):
逆序(顺序-逆序-顺序 / 逆序-顺序-逆序):
命名格式如下:原始音频名称_起点时刻_终点时刻_modified_seg_基频时间起点_基频时间终点_kn1(拐点1、拐点2、拐点3……)_lin(线性插值)_Fpath_起点基频_拐点基频_终点基频_拐点1时间_拐点1基频_拐点2时间_拐点2基频_拐点3时间_拐点3基频……_combo1_1(序号)
如:
dai1_0.00_0.73_modified_seg_0.13-0.62_kn1_lin_Fpath_160.0-100.0-180.0_k0.33_100.0Hz_combo113_113.wav若当前音频生成有误,可以一键删除当前批次所有音频
若无误,此时可以将批量生成的音频批量重命名:
结尾处关于时间和基频的参数建议保留。
注意:
- 批量重命名后无法一键批量删除,只能从文件夹中删除。
- 读取音频后会默认读取当前加载的音频程序直接修改保存且未重命名的所有音频,并加载至“历史F0对比”图窗中。此时若选择“删除本批次音频”,会默认将所有加载的音频全部删除。删除时请核对数量,以及确保生成后重命名,或没有之前修改过的音频还留在当前文件夹。
升降偏移模式
勾选后,输入的频率值将被视为相对于原始 F0 的偏移量(Hz),而非绝对频率值。
点击 “批量生成并保存”,程序将根据组合逻辑,瞬间生成多个音频文件。
命名格式如下:原始音频名称_起点时刻_终点时刻_modified_seg_基频时间起点_基频时间终点_kn1(拐点1、拐点2、拐点3……)_lin(线性插值)_offset(升降偏移模式)_Fpath_起点基频_拐点基频_终点基频_拐点1时间_拐点1基频_拐点2时间_拐点2基频_拐点3时间_拐点3基频……_combo1_1(序号)
举个例子:
此时将会生成8个音频:
基频极低时,可以合成类似嘎裂的听感。
5.4 批量处理工具
点击界面顶部的 “批量变速变调工具”,可打开独立的批处理窗口。
此工具用于对整个文件夹的音频进行统一的宏观调整:
浏览:
- 选择包含音频的文件夹。
设置参数:
- 语速倍率:整体拉伸或压缩时长。
- 音高倍率:按比例升降调(如
1.1表示整体升高10%)。 - 音高偏移:按赫兹数值平移(如
20表示整体升高20Hz)。
开始处理:
程序会自动在原目录下新建 processed_... 文件夹,并输出处理后的文件,同时显示处理进度日志。
6 感知实验
6.1 实验设计与配置
感知实验平台是一个基于 Web 技术构建的轻量级、无需后端的听觉感知实验平台。它支持通过可视化界面进行实验设计、音频刺激呈现、问卷调查以及反应时数据记录,非常适合开展语音感知、听辨实验等心理学研究。
实验设计与配置
启动平台后,默认进入 “实验设计器” 界面。左侧导航栏提供了五个主要功能模块:音频数据库、播放序列、实验参数、问卷设置和资源助手。底部提供了项目保存与加载的快捷入口。
音频资源管理 (音频数据库)
- 在 “音频数据库” 标签页中,管理实验所需的媒体资源。
添加资源:
- 可以将实验所需的音频文件或文件夹直接拖入虚线框内,或点击按钮选择文件/文件夹。
支持格式:
- 常见的音频格式 (
.mp3,.wav,.flac,.ogg,.m4a,.aac,.wma)
预览与管理:
- 已加载的资源会显示在列表中,支持在线预览。点击列表上方的 “清空列表” 按钮可重置数据库。
播放序列控制 (播放序列)
在 “播放序列” 标签页中,可以对实验刺激的呈现顺序进行精细控制。
排序策略:
- 正序 (A-Z):按文件名字母顺序升序排列。
- 倒序 (Z-A):按文件名字母顺序降序排列。
- 随机洗牌:一键打乱播放顺序,实现伪随机呈现。
- 手动排序:支持通过鼠标拖拽列表项前面的抓手图标来微调具体的播放顺序。
列表信息:
- 列表中显示每个试次的序号、文件名、类型以及关联的指导语(如有)。
实验参数配置 (实验参数)
在 “实验参数” 标签页中,可以对实验流程进行全局设置:
基础显示:
- 实验标题:设置实验的名称。
- 指导语:设置实验开始前的说明文本,支持 HTML 格式(如换行、加粗)。可勾选 “使用大字” 以提高可读性。
- 试次间展示语:设置在两个试次之间显示的文本(如“请准备下一题”)。同样支持 HTML 和大字模式,并可选择是否启用。
播放控制:
- 试次切换模式:
- 自动进入下一题:试次结束后自动跳转。
- 按任意键进入下一题:试次结束后需被试按键才继续。
- 自动播放:勾选后,进入试次时自动播放音频;否则需被试手动点击播放。
- 提示音:是否在每个试次开始前播放短暂的“嘟”声提示。
- 显示文件名:是否在实验运行时显示当前播放的文件名。
- 试次间隔:设置两个试次之间的等待时间(毫秒)。
按键设置:
- 定义有效的反应按键及其含义(例如:按
F代表“错误”,按J代表“正确”)。支持动态添加或删除按键配置。
(“试次间展示语”记得勾选“使用大字”)
问卷与表单 (问卷设置)
平台内置了问卷系统,用于在实验开始前收集被试信息。
题型支持:
- 文本:用于输入姓名、年龄等开放式信息。
- 单选:用于性别、利手等互斥选项。
- 多选:用于多项选择题。
选项设置:
- 对于单选和多选题目,可以通过逗号分隔的方式快速输入选项内容。
必答设置:
- 可设置题目是否为必填项。
动态编辑:
- 支持自由添加、删除题目,实时调整问卷结构。
资源助手 (高级功能)
“资源助手” 标签页提供了批量处理实验素材的工具:
生成指导语文档:
- 可以将本地文件夹拖入,生成包含文件路径的
.xlsx模板。支持设置 “路径前缀”,便于在不同设备间迁移实验时保持路径一致性。(之所以选择.xlsx,是因为.csv在修改时输入中文,读取后容易出现乱码)
导入试次间指导语:
- 支持上传 XLSX 文件来批量设置播放列表。XLSX 格式要求第一列为文件路径(或文件名),第二列为该试次对应的特定指导语。导入时会自动匹配已加载的音频资源。此时,有指导语的音频条目将会显示绿色,没有的则将会显示灰色。
编辑试次间指导语:
可以在播放序列页面手动更改每个音频条目的指导语。
项目保存与加载
- 保存配置:设计完成后,请单击左侧底部的“保存项目配置”按钮。这将把当前的音频列表、播放顺序、参数设置及问卷结构导出为
.json文件。请务必保存,防止误关闭网页导致配置丢失。 - 加载配置:下次实验时,点击“加载项目配置”并选择之前的
.json文件,即可瞬间恢复所有设置(注意:需确保同名的音频文件已重新加载到音频数据库中)。
6.2 实验运行与数据导出
运行实验
点击左侧底部的 “开始运行实验” 按钮,进入正式实验流程:
被试信息登记:
被试填写预设的问卷信息(如姓名、性别等)。
指导语阅读:
全屏展示实验指导语,点击任意处开始实验。
听音辨认:
- 系统根据预设参数(如提示音、自动播放)呈现刺激。
- 被试根据直觉按下键盘上的对应按键(如
1、2或3)进行作答。 - 界面上方显示当前进度条,系统后台自动记录按键内容及反应时(RT)。
- 若需要中断试验,可以点击右上角的“强制结束”,此时已实验的部分会被保存。
数据导出
实验结束后,系统会自动跳转至结束页面,并触发数据下载。刚刚的实验结果会被保存为.csv文件。此时系统会提醒用户保存当前配置,或返回设计器。返回设计器时,之前的配置不会消失,会一并保存。
数据格式:
生成.csv表格文件,文件名为被试ID_时间戳.csv。
包含内容:
- 被试信息:Participant_ID, Timestamp_Date, Timestamp_Time 及问卷回答 (Q_xxx)。
- 试次数据:Trial_Index (序号), Audio_Filename (文件名), Response_Key (反应键), Reaction_Time_ms (反应时), Is_Valid_Key (按键是否有效)。
用户可对该表格进行进一步的处理,如统计反应时、计算正确率等等。
7 设置
7.1 常用设置
此区域包含了影响语音参数提取(如基频、共振峰、能量、频谱倾斜等)的核心参数。
能量参数
能量阈值(比例)
- 含义:用于判断语音片段是“有声”还是“无声/静音”的相对能量阈值。
- 作用:系统会计算整段音频的最大能量(Max Energy)。如果某帧的能量低于
Max Energy × 能量阈值,该帧将被视为静音段,不进行某些参数的计算或将其标记为无效。 - 推荐值:默认
0.01(即1%)。如果录音背景噪音较大,可适当调高此值;如果语音较弱,可适当调低。
能量窗口(毫秒)
- 含义:计算短时能量时所使用的窗口长度。
- 作用:决定了能量计算的时间分辨率和平滑程度。
- 推荐值:默认
25ms。
帧与窗口参数
帧移(毫秒)
- 含义:两个相邻分析帧之间的时间间隔(步长)。
- 作用:决定了输出数据的时间密度。较小的值(如
1ms)提供更高的时间分辨率,但计算量增大,数据量增加。较大的值(如10ms)计算更快,但可能丢失快速变化的细节。
窗宽(毫秒)
- 含义:对每一帧进行频域分析(如计算共振峰)时所截取的信号长度。
- 作用:宽窗:频率分辨率高,时间分辨率低(适合观察谐波结构)。窄窗:时间分辨率高,频率分辨率低(适合观察共振峰)。
- 推荐值:默认
25ms (对于一般语音分析是通用的选择)。
平滑点数
- 含义:对输出的参数轨迹进行移动平均平滑的窗口大小(点数)。
- 作用:
0表示不进行平滑。大于0的值会使曲线更平滑,去除微小的抖动,但可能掩盖真实的快速变化。
周期估算参数
本软件在计算不同声学参数时,会根据基频(F0)动态调整分析窗口的长度(即截取多少个基音周期)。这两个参数的设置与VoiceSauce相同。
谐波估计周期数
- 含义:在计算频谱谐波幅值(如 H1, H2, H4, A1, A2, A3, H2k, H5k)时,截取的基音周期数量。
- 作用:谐波分析需要较高的频率分辨率,因此通常需要包含多个完整的基音周期。
- 推荐值:默认
3。过少可能会导致频谱泄露,过多会降低时间分辨率。
能量/CPP/HNR 周期数
- 含义:在计算能量 (Energy)、倒谱峰值突出度 (CPP) 和 谐波噪声比 (HNR) 时,截取的基音周期数量。
- 作用:这些参数对窗口长度的敏感度与谐波不同,因此独立设置。
- 推荐值:默认
5。
递归子目录
- 含义:处理文件时,是否包含输入目录下的所有子文件夹。
- 作用:勾选会扫描输入目录及其所有层级子目录中的
.wav文件。不勾选仅扫描输入目录当前层级的文件。
7.2 REAPER 参数
本软件使用 REAPER 算法(Google 开发的鲁棒性基频追踪算法)作为主要的基频提取手段之一。
最低基频
- 含义:F0 搜索范围的下限。
- 作用:防止将低频噪音误判为基频,或防止产生过低的倍频程错误(Octave Error)。
- 推荐值:男性语音通常可设为
50-70Hz,女性可稍高。默认40Hz。若主要研究嘎裂相关发声类型,可设置为20。
最高基频
- 含义:F0 搜索范围的上限。
- 作用:防止将高频共振峰或噪音误判为基频。
- 推荐值:默认
500Hz。对于儿童或高音歌唱,可能需要调高。若主要研究假声相关发声类型,可设置为1000。
hilbert
- 含义:是否在分析前对信号应用希尔伯特变换。
- 作用:勾选:推荐用于经过非线性相位失真的信号(如录音室后期处理过的音频)或近讲麦克风录音。它可以改善残差信号的峰值特性。不勾选:适用于原始波形保持较好的信号。
- 默认:勾选。
no-highpass
- 含义:是否禁用 REAPER 内部默认的高通滤波器。
- 作用:勾选:禁用高通滤波。REAPER 默认会滤除低频分量以去除直流偏置和低频隆隆声。如果你的信号已经是清洗过的,或者你需要保留极低频成分,可以勾选此项。不勾选:启用高通滤波(REAPER 官方默认行为)。
- 默认:不勾选。
8.更新计划
8.1 未来更新计划
(2026-12)增加唇形特征提取模块
这个板块之前已经做过实验写过文章了,稍后整合进去就可以了。
(2026-01)增加语谱图转音频模块
这个也做过实验,可参考该回答:
https://www.zhihu.com/question/793458414/answer/4607998600
目前使用的是传统算法,效果一般。后续可能会使用训练出来的开源的声码器模型(这个也用过,输入语谱图效果还可以,但是可能需要自己训练一个照片/截图转语谱图的模型级联在声码器前面)。
(2026-02)优化声学特征提取算法
(2026-03)语音合成
- 增加输入音标处的辅音音标输入。
- 改善部分参数的合成效果(Shimmer、Jitter、AV)
- 改善复制合成的部分的效果
8.2 联系作者
如您有任何建议或意见,或发现了bug,欢迎发送邮件或在知乎平台联系作者。
该程序完全开源免费,允许二改二传。若您发现任何非法倒卖行为,也烦请您联系作者。
邮箱:jinglw3@mail2.sysu.edu.cn
知乎:@井韶子